1. Field
Data communication. Specifically, communication of data messages using cyclic redundancy code (CRC) checks.
2. Background
Digital data communication, such as communication of data messages over a peripheral component interconnect (PCI), a PCI extended (PCI-X), a PCI (PCI-E), or another synchronous or asynchronous communication links may send error checking information to ensure that data messages received by a data message receiver are not altered. For example, data messages may be transmitted over a PCI bus using transaction layer packets (TLP) having cyclic redundancy codes (CRC) appended to each data message. Each CRC transmitted is calculated by a CRC calculator at the transmitter using the data message, appended at the most significant bit (MSB) and of the data message and transmitted with the data message to the receiver. The receiver calculates a receiver CRC using the data message received. The receiver compares the receiver CRC calculated with the CRC received from the transmitter. If the two CRCs match, then the data message received is presumed valid, or error free.
A CRC is a function of the (1) data message to be transmitted, (2) a standard polynomial, and (3) an initial CRC value or code. Appropriate standard polynomial and CRC values are defined in specifications such as the 3GIO base specification (see the PCI Express Base Specification, revision 1.0a and Published Apr. 15, 2003 by PCI-Special Interest Group (SIG) Administration, Portland Oreg.). To calculate a CRC in one clock cycle, a CRC calculator having a processing capability to process a length of data bits in one clock cycle equal to the length of the data message may be used. Thus, for variable length messages, a transmitter may include a CRC calculator for each length message to be transmitted.